package arithmetic;

import java.util.Scanner;

/**
 * 知识点梳理：
 * 1.ASCII码：0~9 =》 48~57；A-Z =》 65~90 a-z =》 97 ~ 122
 * 2.switch(){
 *     case state1:
 *     break;
 *     case state2:
 *     break;
 *     ....
 *     default:
 * }
 * 3.幂乘与类型转换：(long)Math.pow(4,3)
 * 4.字符转成数值类型 示例：char ch = '1'； long i = Long.parseLong(String.valueOf(ch);
 * 描述
 * 写出一个程序，接受一个十六进制的数，输出该数值的十进制表示。
 *
 * 数据范围：保证结果在 1≤n≤2^31 −1
 * 输入描述：
 * 输入一个十六进制的数值字符串。
 *
 * 输出描述：
 * 输出该数值的十进制字符串。不同组的测试用例用\n隔开。
 *
 * 示例1
 * 输入：
 * 0xAA
 * 复制
 * 输出：
 * 170
 */
public class TestHW5 {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        test(in.nextLine());
    }


    public static void test(String str){
        boolean f = str.startsWith("0x");
        boolean f1 = str.length()>=3;
        if(f && f1){
            str = str.substring(2,str.length());
            char[] chs = str.toCharArray();
            for(char ch:chs){
                if(!((ch>=48 && ch<=57)||(ch>=65 && ch<=70))){
                    System.out.println("包含非法字符串,请输入正确的十六进制字符串");
//                    System.exit(404);
                    return;
                }
            }
            long result = 0;
            for(int index = chs.length-1;index>=0;index--){
                char ch = chs[index];
                long value = 0;
                switch(ch){
                    case 'A':
                        value=10;
                        break;
                    case 'B':
                        value=11;
                        break;
                    case 'C':
                        value=12;
                        break;
                    case 'D':
                        value=13;
                        break;
                    case 'E':
                        value=14;
                        break;
                    case 'F':
                        value=15;
                        break;
                    default:
                        value = Long.parseLong(String.valueOf(ch));
                }
                int powValue = chs.length-1-index;
                result += value*(long)Math.pow(16,powValue);
            }
            System.out.println(result);
        }else{
            System.out.println("请输入正确的十六进制字符串");
        }
    }
}
